/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlets;

import Beans.HorarioDoUsuario;
import Beans.Usuario;
import Daos.HorarioDoUsuarioDao;
import Daos.UsuarioDao;
import Validador.ValidaUsuario;
import Validador.ValidadorGenerico;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author wbartko
 */
public class ServletAlterarDadosUsuario extends HttpServlet {

    private String retornadiaSemana(int i) {
        switch (i) {
            case 1:
                return "seg";
            case 2:
                return "ter";
            case 3:
                return "qua";
            case 4:
                return "qui";
            case 5:
                return "sex";
            case 6:
                return "sab";
            case 7:
                return "dom";

        }
        return "seg";
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String senha = request.getParameter("senhaAtual");
        String novaSenha = request.getParameter("novaSenha");
        String confirmarNovaSenha = request.getParameter("confirmarNovaSenha");
        String email = request.getParameter("email");
        String telefone1 = request.getParameter("telefone");
        String telefone2 = request.getParameter("celular");

        String horarioLivre = null;
        String diaSemana = "seg";

        System.out.println("Telefone 1 " + telefone1);
        System.out.println("Telefone 2 " + telefone2);





        //pega usuario da sessao
        HttpSession sessão = request.getSession(true);
        Usuario usuario = (Usuario) sessão.getAttribute("usuario");

        //mata sessoes invalidas
        sessão.removeAttribute("senhaErrada");
        sessão.removeAttribute("senhaNula");
        sessão.removeAttribute("senhasNaoBatem");
        sessão.removeAttribute("EmailInvalido");
        sessão.removeAttribute("telefone1Erro");
        sessão.removeAttribute("telefone2Erro");
        sessão.removeAttribute("erroHorarioLivrePessoa");








        //classe que valida todos os usuarios
        ValidaUsuario validaUsuario = new ValidaUsuario(usuario);


        //contador para indicar que houve algum erro em preencher os dados
        int contadorErro = 0;

        //se foi digitado a senha errada
        if (!usuario.getSenha().equals(senha)) {
            contadorErro++;
            sessão.setAttribute("senhaErrada", "A senha digitada está incorreta");
        }
        //senha nula
        if (novaSenha == null || (novaSenha == null ? "" == null : novaSenha.equals(""))) {
            contadorErro++;
            sessão.setAttribute("senhaNula", "A nova senha é inválida");
        } else {

            //confirmar senha e nova senha nao diferentes
            if (!novaSenha.equals(confirmarNovaSenha)) {
                contadorErro++;
                sessão.setAttribute("senhasNaoBatem", "Senhas não conferem");
            } else {
                usuario.setSenha(novaSenha);
            }
        }


        //validar email
        ValidadorGenerico validadorGenerico = new ValidadorGenerico();
        if (!validadorGenerico.validaCampoVazioOuNulo(email) || !validadorGenerico.validaFormatoDoEmail(email)) {
            System.out.println("Email individuo " + usuario.getEmail());
            contadorErro++;
            sessão.setAttribute("EmailInvalido", "Email Inválido");
        } else {
            usuario.setEmail(email);
        }

        if (telefone1 == null || (telefone1 == null ? "" == null : telefone1.equals(""))) {
            contadorErro++;
            sessão.setAttribute("telefone1Erro", "Telefone Inválido");

        } else {
            usuario.setTelefone1(telefone1);
        }

        if (telefone2 == null || (telefone2 == null ? "" == null : telefone2.equals(""))) {
            contadorErro++;
            sessão.setAttribute("telefone2Erro", "Telefone inválido");

        } else {
            usuario.setTelefone2(telefone2);
        }

        //verifica se tem ao menos um horario selecionado
        int contadoErroHorarioLivre = 0;

        for (int i = 1; i <= 7; i++) {
            diaSemana = retornadiaSemana(i);

            for (int f = 8; f <= 24; f++) {
                String horario = f + diaSemana;
                horarioLivre = request.getParameter(horario);
                System.out.println(horario + ": " + horarioLivre);

                //se o horario livre, estiver selecionado, grava no banco
                if (horarioLivre == null) {
                    contadoErroHorarioLivre++;


                }

            }
        }

        if (contadoErroHorarioLivre >= 119) {
            sessão.setAttribute("erroHorarioLivrePessoa", "Selecione ao menos um horário");
            contadorErro++;
        }







        if (contadorErro > 0) {
            sessão.setAttribute("usuario", usuario);
            response.sendRedirect("dadosPessoais.jsp");
        } else {
            sessão.removeAttribute("senhaErrada");
            sessão.removeAttribute("senhaNula");
            sessão.removeAttribute("senhasNaoBatem");
            sessão.removeAttribute("EmailInvalido");
            sessão.removeAttribute("telefone1Erro");
            sessão.removeAttribute("telefone2Erro");
            sessão.removeAttribute("erroHorarioLivrePessoa");

            //apaga todos os horarios livres atuais do usuario
            List<HorarioDoUsuario> horariosAntigos = new HorarioDoUsuarioDao().get(usuario);
            for (int i = 0; i < horariosAntigos.size(); i++) {
                new HorarioDoUsuarioDao(horariosAntigos.get(i)).delete();

            }      

            //salva dados no banco
            new UsuarioDao(usuario).persist();



            for (int i = 1; i <= 7; i++) {
                diaSemana = retornadiaSemana(i);

                for (int f = 8; f <= 24; f++) {
                    String horario = f + diaSemana;
                    horarioLivre = request.getParameter(horario);
                    System.out.println(horario + ": " + horarioLivre);

                    //se o horario livre, estiver selecionado, grava no banco
                    if (horarioLivre != null) {
                        new HorarioDoUsuarioDao(new HorarioDoUsuario(horario, usuario)).persist();
                    }

                }
            }





            //sessao com os nomes de usuario para pagina welcome
            HttpSession sessao = request.getSession(true);
            sessao.setAttribute("usuario", usuario);

            //atualiza horario livre de usuario
            sessão.removeAttribute("horariosLivres");
            List<HorarioDoUsuario> horarioDoUsuarios = new ArrayList<HorarioDoUsuario>();
            horarioDoUsuarios = new HorarioDoUsuarioDao().get(usuario);
            sessão.setAttribute("horariosLivres", horarioDoUsuarios);

            response.sendRedirect("welcome.jsp");




        }



    }
}
